黑客盗币手法与攻击面全景

从一笔钱离开你的钱包开始倒推:13 张 UML 图拆开私钥、签名、供应链、合约、基础设施五层攻击面
面向安全研究 / 从业者 · 数据截至 2026-10 · 金额口径见文末说明

0. 损失结构速览

关于"盗币",最常见的误解是:黑客靠找到智能合约的漏洞偷钱。这在 2016–2021 年大体成立,但 2022 年之后已经不成立了。先看四组数字,它们决定了整份文档的重心。

口径(来源)关键数字说明
DeFiLlama 累计(至 2026 年中)$16.69B,约 40% 与"某人拿到了私钥"相关不是区块链或合约漏洞,而是密钥控制权失守
Chainalysis 2024 年报全年被盗 $2.2B,私钥泄露占 43.8%2024 下半年攻击目标从 DeFi 转向中心化服务
CertiK 2025 H1被盗 $2.47B,其中钱包沦陷 $1.7B / 34 起仅 Q1 三起大案就贡献 $1.45B(含 Bybit)
TRM Labs 2026 H1基础设施类攻击 = 金额 76%,事件数仅 15%典型的"少量斩首、高价值"分布

注:各机构对"基础设施/私钥/钱包沦陷"的归类并不一致,数字不可跨表相加,只用于判断结构。

两条结论,贯穿全文:

1. "偷私钥"是金额问题——单次损失最大、最难追回、最依赖社工与供应链。
2. "写错合约"是频率问题——事件数量多、单次金额小、但 DeFi 内部损失里协议逻辑漏洞仍占约 89%(Immunefi 2025)。

所以本文不按"漏洞类型"排序,而按钱被拿走的路径排序:先看攻击者怎么走进来(行为图),再看这条路径上由哪些组件构成(结构图),最后逐类拆手法(第三部分)。

0.1 分析口径

本章术语

私钥泄露(Private Key Compromise)
攻击者获得对某个地址(EOA)的完全控制权。链上无任何异常交易特征,因为交易本身就是"合法签名"的。
基础设施攻击(Infrastructure Attack)
TRM 的分类口径:不攻击合约代码,而攻击运行合约、托管密钥、生成交易的那套系统——服务器、CI/CD、前端、DNS、云账号。
事件数 vs 金额
同一类攻击的"发生频率"和"造成损失"经常背离。钓鱼每年几十万起但单笔小;私钥泄露一年几十起却能吃掉全年一半损失。
第一部分 · 行为图 — 系统"做什么"

1. 威胁模型:谁在偷、偷什么

在讨论手法之前必须先固定威胁模型。同一个"盗币"动作,国家级 APT 和脚本小子的路径完全不同:前者用半年做社工,后者用现成的钓鱼站批量撞运气。防护措施也必须分开设计。

1.1 四类攻击者

PlantUML diagram
图 1-1:盗币威胁模型用例图(Use Case Diagram)——攻击者类型与其可达的攻击面
攻击者资源与耐心典型目标代表案例
国家级 APT数月到数年;有预算、有组织、可长期潜伏交易所、托管商、跨链桥、大额多签Lazarus / TraderTraitor(Bybit $1.46B、Ronin $624M、DMM $305M)
组织化犯罪团伙数周;流水线作业,钓鱼套件 + 洗钱通道齐全散户钱包、DeFi 用户、中小项目各类 approve 钓鱼、Permit 钓鱼、地址投毒
脚本小子分钟级;扫全网暴露面未初始化合约、弱随机数、暴露的 RPC / 私钥扫描 GitHub 上的 `.env`、`eth_call` 批量探测
内部人员知情、有权限热钱包、提币审核、部署密钥交易所内鬼、项目方卷款(多归入 H 类)

一个反直觉的事实:绝大多数"黑客很厉害"的叙事,实际发生的是社工 + 供应链。Bybit 案里没有任何 0day,攻击者做的是让 Safe 的一名开发者运行了一个"看起来是正常任务"的恶意程序。技术门槛远低于宣传。

1.2 被盗的到底是什么

链上没有"钱"这个东西,只有状态。所谓盗币,本质是把一条合法签名的交易写进链上状态,把某个地址的余额改小、把另一个地址的余额改大。因此攻击者真正要拿到的,是下面四样之一:

目标物拿到之后能做什么典型载体
私钥 / 助记词无限次签名,直到地址被清空纸、截图、云笔记、密码管理器、浏览器扩展、硬件钱包备份
一次有效签名单次转走指定额度,或留下长期授权approve / permit / 多签交易 / 离线签名文件
合约控制权改逻辑、铸币、抽干资金池proxy admin / owner / upgrade authority
基础设施凭据改前端、改提币逻辑、读取密钥管理系统AWS/GCP token、CI secret、SSH、域名/DNS、S3

1.3 信任边界:钱在谁手里

把资金链路画成一条线,可以看出"托管"与"自托管"的信任边界完全不同:

自托管:  你 ──私钥──► 链上合约 ──► 资产
          ↑ 唯一失效点:私钥/签名设备

托管:    你 ──账号密码/2FA──► 交易所 ──热钱包私钥──► 链上 ──► 资产
          ↑ 失效点:账号、客服、服务器、热钱包、提币风控

合约账户:你 ──签名者 k-of-n──► Safe/MPC 合约 ──► 资产
          ↑ 失效点:每个签名者的设备 + 前端(交易内容展示层)+ 合约本身

第三行是关键:多签把"单点私钥"拆成了多个点,但引入了一个新的单点——前端。签名者看到的内容由前端渲染,多签只保证"有这个数量的签名",不保证"签的内容是你以为的内容"。Bybit 案正是打在这里。

本章术语

EOA(Externally Owned Account,外部账户)
由私钥直接控制的账户。签名即生效,没有"二次确认"的概念。
合约账户(Contract Account)
由代码控制,转账必须满足代码逻辑。多签钱包(Safe)、MPC 钱包、AA 钱包都属于此类。
信任边界(Trust Boundary)
数据或控制权在不同信任级别的主体之间跨越的位置。攻击者总是找边界上"验证最弱"的那一跳。
APT(Advanced Persistent Threat,高级持续性威胁)
有国家或组织背景、长期潜伏、目标明确的攻击者。与"机会主义攻击"相对。

2. 攻击生命周期

把 40 多个具体手法压缩成一条流水线,会发现它们都落在七个阶段里。理解阶段的意义在于:防御只需要切断其中任意一环,而攻击必须七环全通。

PlantUML diagram
图 2-1:盗币攻击生命周期活动图(Activity Diagram)——七阶段与两条分支
阶段攻击者要解决的问题常见技战术(详见第三部分)可切断点
1 侦察谁有钱、谁在用 Safe、谁的员工会点链接链上分析、社媒画像、GitHub 依赖清单、招聘信息减少公开暴露面
2 初始立足进入一台机器或一个账号钓鱼邮件、假面试、恶意 npm 包、暴露的 RPC/后台终端防护、邮件网关、最小权限
3 凭据收集把"一台机器"变成"一套权限"infostealer、浏览器 cookie、AWS 会话 token、SSH key硬件密钥、短期凭据、分权
4 权限获取拿到能动的钱的那把钥匙私钥文件、云 KMS、CI secret、签名者设备HSM/MPC、多签阈值、时间锁
5 资产归集找出所有能拿的扫 approve、扫同助记词派生地址、扫侧链余额定期撤销授权、地址隔离
6 转移在受害者反应前搬走拆单、批量、抢先(front-run)救援交易监控告警、自动暂停、限额
7 洗钱变现切断链上追踪混币器、跨链、DEX、NFT 洗价、OTC交易所冻结、链上标记

第 4 阶段是分水岭。前三个阶段完成并不等于钱会丢——攻击者可能只拿到一台办公电脑。真正决定损失的是第 4 阶段:这台电脑上有没有签名能力、云账号里有没有 KMS 权限。绝大多数"被入侵但没损失"的案例,都是在这一步断掉的。

2.1 驻留时间为什么重要

国家级攻击者的平均驻留时间以月计。Bybit 案中,Safe 开发者被控后,攻击者等待了数周才动手——因为要等一个"目标正在发起多签交易"的时机,让篡改后的页面出现在正确的人面前。这类"守株待兔"式攻击有两个特征:

因此针对 APT 的检测重点不是"异常交易",而是发布链完整性:前端构建产物是否可复现、S3 写入是否有人审、CI 是否有签名校验。

3. 签名端攻击链

这是最主流、也最被低估的一条链。它不需要攻破任何服务器,只需要让用户在"看起来正常"的页面上签一次名。

PlantUML diagram
图 3-1:签名端攻击链时序图(Sequence Diagram)——从钓鱼入口到资金转出

3.1 为什么"签一次名"就够了

以太坊的授权模型有两个设计,被攻击者用到了极致:

  1. approve 是独立的、无限期的状态。你授权某个合约"可以花我的 USDC",这条授权写进 ERC-20 合约的 allowance[owner][spender],直到你主动改回 0。页面关了、钱包断了、电脑重启,授权还在。
  2. permit 是离线签名。EIP-2612 允许用一条签名消息完成授权,不上链、不花 gas、不弹"确认交易"。用户看到的只是一段"登录签名",实际签的是一张空白支票。Permit2 把这个能力扩展到了所有 ERC-20。
签名类型用户看到的实际授权的危险点
approve(spender, amount)"连接钱包 / 授权"某地址可转走 amount(常见为 2^256-1)无限额、无到期
permit(...) (EIP-2612)"登录签名,不花 gas"离线授权,任何人可代提交上链无交易弹窗,最易被骗
Permit2.permit(...)"一次授权,处处可用"对 Permit2 合约的全局授权一次签名覆盖所有代币
setApprovalForAll(op, true)"授权收藏品"整个 NFT 集合的转移权一次签走全部 NFT
eth_sign / personal_sign"验证钱包所有权"对任意 hash 的签名,可被拼成合法交易盲签,内容不可读
EIP-7702 authorization"升级钱包 / 领取空投"把 EOA 的代码委托给指定合约委托后所有转入自动被扫走

3.2 EIP-7702:2025 年之后的新变量

Pectra 升级(2025-05)引入 EIP-7702,允许 EOA 设置一段代码(delegation),从而获得智能合约账户的能力。这带来一个全新的攻击面:

正常:  你的 EOA ──签名──► 转账交易
被诱骗:你的 EOA ──签名──► 7702 authorization ──► 委托给攻击者合约
        之后:任何人往你地址打币 → 攻击者合约的 fallback 自动转走

关键差异在于持续性:approve 钓鱼偷的是"当前余额",7702 钓鱼偷的是"这个地址的未来"。2025 年下半年已出现专门扫描 7702 委托、自动清空入账的 sweeper 机器人(社区称 CrimeEnjoyor 类合约),资金一进即出,人工根本来不及。

识别要点:钱包弹窗里出现 Set EOA account code / Authorization / Delegation 字样,且你并没有主动做"账户升级",一律拒绝。这不是普通交易。

3.3 盲签与"所见非所签"

即使不涉及 approve,签名环节本身也可被攻击:

本章术语

allowance(授权额度)
ERC-20 合约里记录的"owner 允许 spender 动用的上限"。它是链上状态,与你的登录状态无关。
Permit / Permit2
EIP-2612 定义的离线授权签名;Uniswap 的 Permit2 把它泛化到所有 ERC-20,并引入"一次授权、多协议共享"。
盲签(Blind Signing)
签名设备无法展示待签内容的真实语义,用户只能凭"看起来像"来确认。
地址投毒(Address Poisoning)
用首尾字符相同的小额转账污染你的交易历史,诱导你复制错误地址。
EIP-7702
Pectra 升级引入的"给 EOA 设置代码"机制,让普通地址可以临时或长期具备合约逻辑。

4. 供应链攻击链:Bybit 复盘

2025-02-21,Bybit 的 ETH 冷钱包(Safe 多签)被转走约 40 万 ETH,价值 14.6 亿美元,是史上最大单笔。这起案件之所以必须单独讲,是因为它同时击穿了"冷钱包"和"多签"两个被视为终极防线的假设,而用的不是 0day。

4.1 事件时间线

时间(UTC)事件
2025-02 之前数周攻击者通过社工诱骗 Safe{Wallet} 一名开发者运行恶意程序,控制其工作站
潜伏期收集 AWS 会话 token,取得存放 Safe 前端静态资源的 S3 存储桶写权限
2025-02-21 13:30Bybit 从 Safe 多签冷钱包向热钱包发起例行转账(30,000 ETH)
2025-02-21 14:13签名者在前端看到的是"正常转账",实际签名的是被篡改的 multisend 调用
数分钟内Safe 合约的 MasterCopy 被 delegatecall 替换为恶意实现,资金分 40 余笔转出至 39 个地址
2026-08Bybit 在美国对朝鲜、RGB 及 Lazarus 提起民事诉讼,法院下达初步禁令冻结部分资产;累计追回约 $48.4M

4.2 技术拆解:一次 delegatecall 改存储

PlantUML diagram
图 4-1:供应链攻击时序图(Sequence Diagram)——从开发者工作站到多签存储被改写

Safe 钱包是典型的代理合约模式:用户交互的 Safe 实例只存状态(owners、threshold、nonce),逻辑在 MasterCopy 里,实例的 storage slot 0 存着 MasterCopy 地址。正常升级流程是:多签批准 → 调用 changeMasterCopy → 写入新地址。

攻击者的做法是把这次升级"藏进"一次普通转账里:

// 前端展示的:multisend 批量转账
to:   MultiSendCallOnly
data: multiSend([ transfer(to=热钱包, value=30000 ETH) ])

// 实际签名的:multisend 里夹了一条对 Safe 自身的调用
to:   MultiSendCallOnly
data: multiSend([
        transfer(to=热钱包, value=30000 ETH),
        call(to=Safe自身, data=changeMasterCopy(恶意实现))   ← 隐藏项
      ])

为什么签名者没看出来:

替换 MasterCopy 之后,恶意实现里 transfer 的语义被改成"把全部余额转给攻击者",于是后续任何一次提币都是一次清空。这就是"冷钱包"失效的真正含义:冷的是私钥,不冷的是签名时看的那块屏幕。

4.3 三个可复用的结论

1. 多签解决的是"谁能签",不解决"签什么"。阈值为 3/5 也挡不住 5 个人都看到假页面。

2. 前端是签名协议的一部分,必须当作生产系统来管。S3 写权限、CI 发布、CDN 缓存,任何一处被改,等同于私钥被改。

3. 供应链攻击的成本极低。不需要找合约漏洞,只需要一个能运行 exe 的员工。

同类案例时间金额供应链环节
Bybit2025-02$1.46BSafe 前端 JS(S3)
BigONE2025-07$27M生产网络被入侵,改账户与风控服务器逻辑(私钥未泄露)
Paradex2025—第三方交易机器人内部系统被入侵,57 个用户子密钥泄露
BitoPro2025-05$11.5M恶意程序 + 热钱包批量转出

本章术语

代理合约(Proxy Contract)
用户调用的地址不变,逻辑实现在另一个合约里,通过 delegatecall 执行。好处是可升级,坏处是"升级权限"等于"资金权限"。
delegatecall
在当前合约的存储上下文里执行另一个合约的代码。被调合约能改写调用者的 storage——这正是改 MasterCopy 的原理。
MultiSend
Safe 提供的批量调用合约,把多笔操作打包成一笔。它天然适合藏匿附加调用。
供应链攻击(Supply Chain Attack)
不直接攻击目标,而攻击目标信任的上游——开发者、依赖包、CI、CDN、S3。

5. 合约层攻击链

这是"传统意义上"的黑客盗币:不改私钥、不骗签名,直接让合约按错误的价格或错误的余额把资金放出去。它单笔金额通常小于私钥案,但发生频率高得多。

PlantUML diagram
图 5-1:闪电贷 + 价格操纵攻击时序图(Sequence Diagram)——以单笔交易内完成借、操纵、套现、还款

5.1 闪电贷为什么是放大器

闪电贷(Flash Loan)允许在一笔交易内借出任意规模的资金,只要在同一笔交易结束前归还本金加手续费。它本身完全合法,但把攻击者的"启动资金"从数千万降到零:

tx {
  1. 从 Aave/Balancer 借出 100,000,000 USDC        // 无需抵押
  2. 用其中 50,000,000 在目标协议的池子里砸盘        // 价格被压低
  3. 目标协议按"现价"计算你的抵押物价值 → 高估
  4. 借出远超实际价值的资产
  5. 撤销砸盘、归还闪电贷
  6. 净赚差额
}  // 原子性:任一步失败,整笔回滚,攻击者零成本试错

注意第 6 步的"零成本试错":因为交易是原子的,攻击者可以在链下模拟上千次,只在成功的那一次上链。这让"漏洞是否可利用"的判断变得极其廉价。

5.2 四类合约层失效

失效类型本质代表案例
价格来源不可信用池子现货余额当预言机,可被单笔交易操纵Mango Markets($114M)、bZx(2020)
记账/精度错误舍入方向、溢出边界、单位换算写错,导致可凭空放大余额Cetus(2025-05,$223M,溢出使 1 个代币被估成天价)、Abracadabra(2025-10,$1.8M,舍入)
重入与状态不一致先转账后改状态,回调里再进来一次The DAO(2016)、Curve/Vyper 编译器重入锁失效(2023,$70M)
权限与初始化缺失构造函数可被再次调用、owner 未设、代理未初始化Parity 多签(2017,$150M+,initWallet 未加锁)

Cetus 案值得单独记住:它不是"被操纵",而是算术溢出。攻击者在 checked_shlw 的边界上构造输入,让"1 个代币"在内部计算里变成 2192 量级,再用它去换走池子里真实资产。Sui 验证者随后冻结了约 $162M,但这类"代码写错一个字"的损失,任何审计都可能漏掉。

5.3 为什么"审计过"不等于安全

Halborn 的统计显示:被黑的协议里只有约 20% 做过审计,而审计过的协议贡献了约 10.8% 的损失金额。这两个数字合起来说明——审计降低的是"低级错误"概率,不降低"经济模型被利用"概率。预言机操纵、清算逻辑、激励错配,都是"代码没错、设计有洞"。

本章术语

闪电贷(Flash Loan)
无需抵押、必须在同一笔交易内归还的贷款。原子性使它成为零成本攻击杠杆。
预言机操纵(Oracle Manipulation)
通过大额交易改变协议读取的价格源(尤其是把 DEX 现货池当价格源的设计)。
重入(Reentrancy)
合约在完成自身状态更新前调用外部合约,外部合约回调再次进入,重复执行取款逻辑。
原子性(Atomicity)
一笔交易内的所有操作要么全部生效,要么全部回滚。攻击者因此可以无成本地反复试错。

6. 跨链桥攻击链

跨链桥是"把一条链上的信任搬到另一条链",它的安全性等于验证机制与签名者集合两者中较弱的那一个。历史上桥的损失总额长期占 DeFi 被盗金额的最大份额,原因就在这里:桥同时持有巨额流动性,且必须信任链下组件。

PlantUML diagram
图 6-1:跨链桥两类失效路径时序图(Sequence Diagram)——验证逻辑缺陷 vs 签名者沦陷
失效模式机制案例
伪造消息通过验证验证合约未正确校验 Merkle 根 / 签名 / 链 ID,攻击者直接构造"已存款"证明Wormhole(2022,$326M,签名验证被绕过)、Nomad(2022,$190M,根被设为 0 后任何人可伪造)
验证者私钥沦陷多签阈值过低或签名者被社工,直接签出非法跨链消息Ronin(2022,$624M,5/9 中拿到 5 把,源于假 offer letter)、Harmony Horizon(2022,$100M,2/5)
流动性池被掏空桥的 AMM 层存在与普通 DEX 相同的价格/精度问题各类桥内 Swap 模块
中继器/Relayer 被控链下中继进程被入侵,提交伪造事件多起小型桥事件

Ronin 案的教训最直接:攻击者冒充招聘方,给 Axie Infinity 的工程师发了一份"薪资很高的 offer",附件是恶意 PDF。拿到 4 把验证者私钥后,再加上早已控制的 1 把,凑够 5/9 阈值。整个攻击里没有任何密码学被攻破——阈值签名只在你相信"签名者不会点附件"时才成立。

7. 交易生命周期与可篡改点

把任何一笔转账拆成状态机,可以看到攻击者能在哪些环节动手。这张图是全文的"索引":第三部分的每个手法,都能对应到这里的某个状态转移。

PlantUML diagram
图 7-1:交易生命周期状态机图(State Machine Diagram)——每个状态的攻击面
状态此时发生什么可被攻击的方式
构造 ConstructedDApp 生成 to / data / value / chainId / nonce前端 JS 被篡改、恶意 DApp、RPC 返回假数据
展示 Rendered钱包解析并显示"你在做什么"解析器缺陷导致展示与实际不符(盲签)
签名 Signed私钥对交易哈希签名私钥泄露、签名设备被控、用户被骗签 permit
广播 Broadcast发到 RPC 节点进入 mempool恶意 RPC 扣留/替换交易、抢跑
待打包 Pending在 mempool 里排队三明治攻击、替换交易(同 nonce 提高 gas)
执行 ExecutedEVM 按字节码改变状态重入、预言机、权限逻辑被滥用
确认 Finalized达到最终性,不可回滚仅剩重组风险(概率极低,PoW 链略高)

最重要的认知:"签名"这个动作,签的是字节,不是意图。链上只验证"这个字节串的签名对不对",永远不验证"你是不是真的想这么干"。所有签名类攻击都建立在这个缝隙上。

8. 赃款外逃与洗钱

盗币的最后一环不是技术,而是"如何让钱变得可用"。这一步决定了追回率——Bybit 案两年后追回约 $48.4M,不到 3.4%。

PlantUML diagram
图 8-1:赃款外逃与洗钱链路时序图(Sequence Diagram)——分层、跨链、变现

8.1 四层结构

  1. 分层(Layering):把大额拆成成百上千笔,在数千个新地址间跳转。Bybit 案中资金被拆成 40 余笔 1 万 ETH 级别,再分散到 39 个地址。
  2. 混币(Mixing):Tornado Cash、Cryptomixer 等,切断输入与输出的链上关联。2025 年后主要混币器被执法打击,转向跨链 + DEX + 场外。
  3. 跨链(Bridging):Thorchain、跨链 DEX,把资产换到比特币等追踪难度更高的网络,再进 Wasabi 等隐私钱包。
  4. 变现(Cash-out):OTC 柜台、小型交易所、场外担保、NFT 自买自卖洗价。

8.2 为什么"链上透明"没能阻止洗钱

链上数据公开,但身份不公开。分析公司能做的是"聚类"——把行为相似的地址归为一簇——而不是"确认身份"。攻击者的应对方式很朴素:

本章术语

分层(Layering)
洗钱三阶段中的第二段:通过大量拆分与转移,切断资金与来源的直接关联。
混币器(Mixer / Tumbler)
把多人的资金混在一个池子里再取出,破坏输入输出的一一对应。
聚类(Clustering)
链上分析的基本方法:通过共同花费、充值地址、交互模式,把多个地址推断为同一主体。
OTC(Over-the-Counter,场外交易)
不经过公开订单簿的私下成交,是赃款变现的主要出口之一。
第二部分 · 结构图 — 系统"由什么组成"

9. 分层攻击面

行为图回答"怎么被偷",结构图回答"哪一层被偷"。把资金链路按物理/逻辑位置分层,可以看出每层的信任主体、典型漏洞和不可替代的控制点。

PlantUML diagram
图 9-1:分层攻击面部署图(Deployment Diagram)——从用户设备到法币出口的六层
层组成信任主体典型失效
L1 用户端浏览器、钱包扩展/App、硬件钱包、剪贴板、相册、云备份用户自己助记词泄露、infostealer、剪贴板劫持、假 App
L2 接入端DApp 前端、CDN/S3、RPC 节点、WalletConnect 中继项目方 + 服务商前端 JS 篡改、恶意 RPC、假域名、广告位钓鱼
L3 服务端交易所/托管后端、KMS/HSM、CI/CD、运维跳板机构服务器入侵、CI secret 泄露、内鬼、热钱包私钥
L4 链上合约、代理、预言机、验证者/排序器代码 + 共识重入、权限缺失、预言机操纵、MEV
L5 跨链桥合约、验证者集合、中继器桥的验证机制伪造消息、阈值签名沦陷
L6 出口CEX、OTC、混币器、法币通道监管与合规(攻击者的)变现通道被冻结

层级不是并列的,而是串联的。攻击者只需要攻破任意一层就能拿到资产;防守方必须每一层都成立。这是安全经济学里最不对称的地方,也是为什么"多层防御"不是口号而是必需。

9.1 最弱的一层通常不在技术栈里

统计上,L1 与 L3 贡献了绝大部分损失金额,而这两层的共同点是——它们都由"人"操作。L4 的合约漏洞虽然事件多,但单笔金额往往被 TVL 和闪电贷上限约束。

10. 签名栈与信任模型

所有"非授权转移"最终都要经过一次签名(或一次合约调用授权)。签名栈的每一层都在替下一层"翻译"信息,而翻译过程就是攻击面。

PlantUML diagram
图 10-1:签名栈组件图(Component Diagram)——四种签名方案及其失效点
方案私钥在哪谁能单独转走真实失效点
EOA 热钱包浏览器扩展 / 手机 App 本地拿到扩展数据或助记词的人扩展漏洞、恶意插件、设备被控
硬件钱包安全芯片内,永不出设备能在设备上按下确认的人盲签、假固件、供应链替换、胁迫
Safe 多签n 个签名者各自的设备≥ threshold 个签名者前端篡改、签名者设备集体沦陷、合约升级权限
MPC 钱包分片在多方,签名时协同计算≥ 阈值的分片持有方协调服务器被控、签名策略配置错误、单点 UI
交易所托管机构 KMS/HSM + 热钱包机构(你只有债权)账号被盗、客服社工、平台被黑、平台跑路

10.1 每一层都在"信任"下一层

用户 → 相信 → 钱包 UI 显示的语义
钱包 UI → 相信 → DApp 传来的 calldata
钱包内核 → 相信 → 硬件钱包屏幕(如果用了)
硬件钱包 → 相信 → 自己解析的 4byte selector + 参数
合约 → 相信 → 签名者集合与阈值
签名者 → 相信 → 自己那台电脑没被控

Bybit 案断在倒数第二行:签名者相信自己电脑上的浏览器。Ronin 案断在最后一行:签名者相信自己没点开那个 PDF。

设计原则:不要试图让某一层"绝对安全",而是让相邻两层使用不同的信任源。例如:硬件钱包屏幕显示的收款地址,应该与你在另一台设备上独立核对的地址一致,而不是与 DApp 页面一致。

11. 合约代理与权限矩阵

链上资金的实际控制权,体现在"谁能让合约执行任意代码"。多数人只关注 owner,忽略了 proxy admin、guardian、upgrade authority 这三个更危险的权限。

PlantUML diagram
图 11-1:可升级代理与权限组件图(Component Diagram)——四种能"改逻辑"的角色
角色能做什么若被攻破的后果应有的约束
owner调用业务管理函数(改费率、加白名单)视函数权限而定,通常不能直接转账多签 + 时间锁
proxy admin升级实现合约等于拿走全部资金独立多签 + 24h 以上时间锁 + 监控
guardian紧急暂停可冻结用户资金(DoS)多签,且与 admin 分离
upgrade authoritySolana 等链上升级程序等于拿走全部资金多签 + 冷存储

11.1 Parity 案:一次未加锁的初始化

2017 年,Parity 多签钱包的库合约 initWallet 没有限制"只能调用一次",也没有校验调用者。攻击者直接调用它,把库合约的 owner 改成自己,然后 selfdestruct。所有依赖这个库的钱包实例瞬间失效,约 51 万 ETH 被永久冻结(当时约 $150M+)。

这个案例的教学价值在于:它既不是私钥被盗,也不是重入,而是"初始化函数忘了加锁"。在权限矩阵里,它属于"任何人都能成为 owner"这一类。

12. 交易与授权数据模型

如果只能记住一张图,记这张。所有签名类攻击,改的都是下面这几个字段之一。

PlantUML diagram
图 12-1:交易与授权数据模型类图(Class Diagram)——被篡改的字段与后果
字段含义被篡改后的效果
to目标地址钱去了攻击者地址;或调用了恶意合约
data调用的函数与参数"转账"变成 transferFrom;"领取"变成 approve
value附带的原生币数量金额被放大,或归零以伪装成"免费操作"
chainId链标识重放攻击:在 A 链签的交易拿到 B 链执行
nonce账户交易序号抢跑、替换、使原交易失效
gas / maxFee手续费参数提高 gas 抢先执行救援交易
deadline签名有效期缺失则签名永久有效(permit 常见问题)
spender / operator被授权方授权给了攻击者合约
amount授权额度type(uint256).max = 无限授权

实操含义:硬件钱包"清签"(Clear Signing)的价值,就是把这几个字段以人可读的方式呈现出来。任何无法解析 data 的签名请求,都应该被视为高风险。

13. 手法全谱系

把前面所有内容收成一张分类图。A–G 是技术性入侵,H 是社会工程/经济模型滥用,单独标注。

PlantUML diagram
图 13-1:盗币手法全谱系包图(Package Diagram)——八大类与子类
类别核心问题典型单笔量级可检测性
A 私钥与凭据钥匙本身被复制$10M – $1B低(交易看起来完全合法)
B 签名与授权你亲手签了它$1K – $10M中(可撤销授权)
C 供应链你信任的工具被改了$10M – $1.5B低(事后难复现)
D 合约与协议代码逻辑被滥用$1M – $600M高(链上可模拟)
E 基础设施与内鬼系统或人失守$10M – $500M中(日志可查)
F 组织化作案针对人的长期渗透不定低
G 密码学与共识底层假设被打破极小(近年罕见)高
H 诈骗(非入侵)你自愿转的$1K – $100M—
第三部分 · 手法详解 — 每一类怎么发生、怎么被利用、怎么防

14. A 类 · 私钥与凭据

私钥泄露是单笔损失最大的一类,也是最"安静"的一类:链上看到的是合法签名,没有任何异常调用。它几乎全部发生在人这一侧。

14.1 泄露途径全表

途径机制为什么有效
助记词钓鱼页伪装成"钱包验证 / 空投领取 / 账号恢复",要求输入 12/24 个词任何要求输入助记词的页面都是骗局,但恐慌时容易上当
假钱包 App / 扩展应用商店或搜索结果里的仿冒品,安装时就把助记词回传图标、名称、评分都可伪造;官方商店审核不覆盖更新内容
信息窃取木马(infostealer)RedLine、Lumma、Vidar 等,扫浏览器扩展目录、钱包文件、剪贴板、截图不需要 0day,靠恶意广告、破解软件、假安装包传播
云备份 / 截图 / 相册助记词拍照存相册、记在 iCloud 备忘录、微信收藏账号一旦失守,备份就是明文
剪贴板劫持木马监控剪贴板,把复制的地址替换成攻击者地址用户只看首尾几位
SIM Swap / 邮箱接管补办手机卡或接管邮箱,重置交易所密码与 2FA短信 2FA 是单点;邮箱是多数账号的恢复入口
假客服远程控制冒充交易所/钱包客服,诱导安装 AnyDesk/TeamViewer一旦远控,等于把设备交给对方
日志与遥测上报钱包 SDK 把敏感数据写进日志并上传第三方Slope 案:助记词进了 Sentry 日志
物理获取 / 胁迫入室、抢夺、绑架(wrench attack)再强的密码学也挡不住暴力

14.2 三个值得记住的案例

DMM Bitcoin(2024-05,约 $305M)

日本交易所 DMM Bitcoin 的私钥管理委托给第三方钱包服务商 Ginco。攻击者通过社工入侵 Ginco 员工,取得其钱包管理系统的操作权限,最终签出非法转账。这是典型的"托管链上的第二跳":你以为资产在 A,其实 A 把钥匙给了 B,而 B 的员工点了链接。

LastPass(2022 泄露,2023 集中变现,累计 $35M+)

密码管理器 LastPass 的云备份被攻破,其中包含用户加密的 vault。攻击者用从 vault 里找到的助记词,在 2023 年陆续清空多个加密钱包。教训:密码管理器适合存密码,不适合存助记词——它把"离线保管"变成了"在线保管"。

Slope 钱包(2022-08,约 $6M)

Solana 钱包 Slope 把用户的助记词以明文写进了应用日志,日志被发送到第三方监控平台 Sentry。攻击者从日志里批量提取助记词,一次性清空数千个地址。这不是"被攻破",而是把秘密写到了不该写的地方。

14.3 防御要点

15. B 类 · 签名与授权

这一类不需要偷钥匙,只需要你在某个页面点一次"确认"。它的单笔金额通常小于私钥案,但覆盖面极广,是散户损失的第一大来源。

15.1 授权(approve)滥用

ERC-20 的 approve(spender, amount) 会在链上留下一条长期有效的授权。攻击者只要让你对他的合约做一次无限授权,之后可以在任何时间、不需要你任何操作,把余额转走。

// 你签的
approve(0xAttack..., 115792089237316195423570985008687907853269984665640564039457584007913129639935)

// 之后攻击者随时可以
transferFrom(你的地址, 攻击者地址, 你的全部余额)   // 不需要你再签名

变体:

识别方法:钱包弹窗里出现 Approve、Set Approval For All、Permit、Increase Allowance,且对象是你不认识的地址、额度是无限——直接拒绝。真正需要授权的 DApp,通常只需要"用多少批多少"。

15.2 EIP-7702 委托攻击

2025 年 5 月 Pectra 上线后,EOA 可以通过一条 authorization 把自身代码委托给某个合约。攻击者把这条签名包装成"钱包升级 / 领取空投 / 修复漏洞",一旦签下:

与 approve 的关键区别是持续性 + 自动化:approve 偷的是存量,7702 偷的是流量。2025 年下半年已出现专门盯这类地址的机器人,资金到账后数秒内被扫走。

15.3 盲签与展示欺骗

手法用户看到实际发生
eth_sign 盲签"验证钱包所有权"对任意 32 字节哈希签名,可被拼成合法交易
4byte selector 伪装一个常见的 transfer 调用selector 被构造为另一个函数,参数被重新解释
交易模拟欺骗模拟结果显示"无资产变化"用的是攻击者控制的 RPC,返回伪造结果
多签 UI 隐藏调用"批量转账 1 笔"MultiSend 里夹带第 2 笔(Bybit)
地址投毒历史记录里"看起来对"的地址首尾相同、中间不同的攻击者地址

15.4 钓鱼入口:页面是从哪来的

Inferno / Angel / Pink Drainer 产业化

2023–2025 年,"钓鱼即服务"(Phishing-as-a-Service)成熟:一套 drainer 套件按抽成收费(常见 20%–30%),包含高仿页面模板、钱包连接、自动扫描高价值授权、自动拆单转出、以及洗钱通道对接。这意味着发起一次钓鱼的技术门槛已经接近零,剩下只需要流量。

15.5 防御要点

16. C 类 · 供应链

供应链攻击的定义是:不攻击你,攻击你信任的上游。它的性价比极高——改一个 npm 包,可以同时命中几千个项目。

16.1 攻击面清单

环节手法案例 / 说明
前端静态资源改 S3/CDN 上的 JS,针对特定用户注入恶意逻辑Bybit(Safe 前端)、Ledger Connect Kit(2023-12,约 $600K)
npm / PyPI 依赖抢注相似包名、接管维护者账号、投毒 postinstall 脚本event-stream、ua-parser-js、colors 等历史事件
浏览器扩展仿冒 Rabby/MetaMask 上架;或收购真扩展后更新恶意版本商店审核不覆盖"更新后行为"
CI/CD窃取 runner token、改构建脚本、注入发布产物构建产物无签名校验时几乎无法发现
云账号AWS 会话 token、S3 写权限、IAM 过度授权Bybit 案的关键一跳
第三方 SDK / 客服客服机器人、数据分析 SDK 被入侵可读取页面上的地址与签名请求
域名 / DNS / BGP改 NS 记录、劫持注册商账号、BGP 前缀劫持用户访问的是真域名,内容是假的
硬件钱包物流替换、假固件、供应链植入应从官方渠道购买并校验包装
自动更新机制更新服务器被控,推送恶意版本等同于给所有用户装后门

16.2 Ledger Connect Kit:一次 npm 投毒

2023 年 12 月,攻击者通过钓鱼获取了一名前 Ledger 员工的 npm 发布权限,在 @ledgerhq/connect-kit 中植入恶意代码。任何集成了该库的 DApp(包括 Sushi、Revoke.cash 等)都会在用户连接钱包时弹出伪造的"紧急升级"提示,诱导签名。恶意版本存活约 5 小时,损失约 $600K。

这个案例说明:你的 DApp 安全性 = 你所有依赖中最弱的那一个,而依赖链通常有几百层。

可落地的三条:

1. 前端构建产物做 SRI(Subresource Integrity) 与发布签名。
2. 锁版本 + 私有镜像 + 依赖审计,禁止 postinstall 脚本任意执行。
3. 云账号按最小权限拆分,S3 写权限与生产发布权限分离,并开启写入审计告警。

17. D 类 · 合约与协议

这一类是"代码问题",也是最容易被公开复盘、最容易被自动化工具扫描的一类。它的攻击窗口通常只有几分钟,但可以在一笔交易内完成。

17.1 漏洞类型与判定

类型触发条件典型损失
重入外部调用前未更新状态;回调可再次进入The DAO $60M、各类借贷池
精度 / 舍入 / 溢出除法方向、单位换算、位移边界Cetus $223M、Abracadabra $1.8M
预言机操纵价格来自可被单笔交易影响的池子Mango $114M、bZx
权限缺失 / 未初始化初始化函数可重入、owner 未设、缺少 onlyOwnerParity $150M+
代理升级admin 权限过宽或无私钥隔离多起"升级即清空"
签名重放签名未绑定 chainId / nonce / 合约地址跨链重放、批量重放
跨链验证Merkle 根、签名者、链 ID 校验不全Wormhole $326M、Nomad $190M
治理攻击闪电贷借票、提案门槛过低Beanstalk $182M
MEV / 三明治不是"盗",但用户在交易中被抽走价值长期、分散

17.2 为什么形式化验证也救不了经济模型

审计能证明"代码符合规格",但不能证明"规格是对的"。Mango Markets 案中,攻击者用两个自己控制的账户在永续合约里对倒,把 MNGO 价格推高,再以虚高抵押品借走 $114M。合约每一步都严格执行,错的是"用自家代币现货价当抵押品价格"这个设计。

判据:看到一个协议,先问三个问题——
① 价格从哪来?能不能被一笔交易改变?
② 谁能升级合约?升级有没有时间锁?
③ 有没有"用自家代币计价"的环节?

18. E 类 · 基础设施与内鬼

这一层是"机构级"攻击面。它的特点是:一旦破,损失规模由热钱包余额决定,而不是由你能多快反应决定。

18.1 失效点

失效点机制为什么难防
热钱包私钥联网服务器上存私钥,或私钥在内存里可被 dump为了自动提币,必须联网
提币逻辑被改不偷私钥,改"账户余额与风控"服务,让系统自己转钱BigONE 案:私钥从未泄露
API Key / Secret泄露在 GitHub、日志、前端代码、客服截图里很多 key 权限过大且无 IP 白名单
服务器入侵暴露的运维端口、未打补丁的中间件、弱口令CoinDCX 案:官方称"复杂的服务器入侵"
内部人员有权限的人主动作恶或被收买日志可伪造,权限本就合法
云账号 / IAMroot 账号或过度授权角色被接管一个 token 就能改前端、读 KMS
DNS / 域名注册商账号被控、NS 被改用户地址栏看不出异常
备份 / 日志备份里含私钥、日志里含助记词Slope 案即此类

18.2 案例对照

事件时间金额根因
Mt.Gox2014约 85 万 BTC长期挪用 + 热钱包管理失控
Coincheck2018-01$534MNEM 热钱包私钥存于联网服务器,且未用多签
Bitfinex2016-08$72M多签架构配置缺陷,签名接口被滥用
CoinDCX2025-07$44M服务器入侵,仅公司自有资金受影响
BigONE2025-07$27M生产网被入侵,改账户与风控逻辑,私钥未泄露

BigONE 案最值得警惕:传统风控假设"私钥没泄露 = 钱不会丢"。但当提币审核、余额记账、风控规则都由同一套后端服务决定时,改这套服务等同于改私钥。防御必须把"签名"与"记账"做成两个独立系统,且签名前有独立的额度校验。

18.3 内鬼为什么难检测

内鬼的所有操作在日志里都是"合法"的:有权限、在上班时间、用公司设备。可用的检测手段只有三类:

19. F 类 · 组织化作案

这一类不针对系统,针对人。它的投入产出比最高:一次成功的社工,可以抵得上一年的漏洞挖掘。

19.1 典型剧本

剧本流程目标人群
假招聘 / 假 offerLinkedIn 接触 → 高薪岗位 → 技术测试压缩包 / PDF → 木马工程师、签名者、DevOps
假 Zoom / 会议软件"面试要用我们的客户端" → 安装包带后门远程岗位候选人
恶意文档 / LNK / 宏PDF 漏洞、快捷方式执行 PowerShell、宏下载载荷财务、行政、HR
Deepfake 音视频伪造高管指令,要求"紧急转账/提供验证码"财务、运维
水坑攻击入侵目标常看的行业站点,挂载浏览器 exploit整个行业
长期潜伏拿到一个低权限账号后慢慢横向,等关键时机大型机构
假审计 / 假安全公司以"免费审计"名义索取代码与部署权限早期项目
绑架胁迫(wrench attack)物理威胁,逼本人转账高净值个人

19.2 Lazarus 的三次典型行动

三次行动的共性:都不需要 0day,都需要"一个人点了一下"。而且都选择了"签名者"或"能影响签名界面的人"作为目标——因为那是资金链上唯一的人。

组织防御的现实做法:把"高权限签名者"当作高价值目标对待——专用设备、不装聊天软件、不处理邮件、不在社交媒体暴露职位;签名操作在一台只做签名的机器上完成。

20. G 类 · 密码学与共识层

这一类事件最少,但一旦发生就动摇根基。多数"密码学被攻破"的传闻,实际是实现或随机数的问题。

20.1 弱随机数:最真实的密码学事故

私钥的本质是一个 256 位随机数。如果生成时熵不足,私钥空间会从 2256 塌缩到可枚举的规模。

事件机制后果
Profanity 工具漏洞用 32 位随机数做种子生成"靓号地址",实际熵仅约 232Wintermute 做市商地址被暴力破解,$160M(2022)
Randstorm(BitcoinJS 类库)2011–2015 年部分浏览器钱包用 Math.random() 等弱熵源约 $1B 历史地址受影响(2023 披露)
移动端 SDK 熵缺陷多个钱包在低熵环境下生成助记词批量撞库可命中

这类攻击的特点是离线、无声、可批量:攻击者不需要接触你,只需要在本地穷举可能的私钥,然后扫余额。你看到的是"某天钱包突然空了",链上没有任何可疑授权。

20.2 共识层攻击

类型可行性说明
51% 双花小市值 PoW 链可行租算力 → 私下挖一条更长链 → 充币后回滚。ETC、BTG 均发生过
链重组(Reorg)大链极难,小链常见交易所需按确认数风控
日蚀攻击(Eclipse)理论可行隔离节点的对等网络,使其看到错误链
长程攻击PoS 理论风险弱主观性检查点可缓解
量子计算目前不可行Shor 算法可破 ECDSA;后量子签名是长期议题

判断标准:如果一条链的算力/质押成本低于其上承载的资产价值,它就天然适合被 51% 攻击。交易所对小数市值币种设置更高的确认数,原因就在这里。

21. H 类 · 诈骗(非技术入侵)

归类声明:本类不属于"黑客入侵"——没有私钥被窃、没有签名被欺骗、没有代码被利用,资产是受害者自愿转出的。单独列出,是因为它们在真实损失中占比极高,且在传播中经常被混称为"被黑"。理解这个区别,才能选对防御手段。

类型机制与黑客手段的关键区别
Rug Pull(撤池跑路)项目方预留增发/撤池权限,拉高后抽走流动性合约按设计运行;作恶者是"有权限的人"
貔貅盘(Honeypot)合约限制只有白名单能卖,买入即无法卖出代码逻辑公开可查,但用户不看
假交易所 / 假 App高仿站、假客服引导充值,提现时要求"缴税"没有链上入侵,钱直接进了对方账户
杀猪盘(Pig Butchering)长期情感/投资关系建立信任,诱导转入假平台周期以月计,属社会工程诈骗
假空投 + 领取费"先付 gas 才能领",付了就没有下文纯转账,无授权
拉高出货(Pump & Dump)社群喊单拉盘,庄家出货市场行为,通常不构成技术攻击

21.1 一句话区分

黑客手段:你没有转账,钱却走了。
诈骗:你自己按了"发送"。

这两类在链上看起来完全不同:前者有一笔不是你发起的交易(或你签了但不知道内容),后者有一笔你亲手签的、语义清晰的转账。被盗后第一时间区分,决定了后面的处置路径。

21.2 为什么专业机构也常被诈骗

2024 年的一次典型事件中,某知名协议的核心贡献者在视频会议中被 Deepfake 伪造的"合作方高管"说服,执行了一笔"测试转账",损失数十万美元。技术防护(多签、硬件钱包)在这类场景下完全无效——因为交易本身是合法发起的、内容是正确的、签名是真实的。

可用的防御只有流程:任何转账都必须经过"第二通道"确认(例如:视频会议里说的账号,必须通过另一个已知号码回拨确认)。

第四部分 · 实战 — 可执行的动作

22. 个人自查手册

下面这份清单按"投入产出比"排序。前三条能挡掉绝大多数损失,后面的属于加固。

22.1 先把账户分层

层用途存放上限
金库 Vault长期持有,几乎不动硬件钱包 / 多签,助记词离线分片全部资产的 80%+
交易 Trading交易所买卖合规交易所,独立邮箱 + 硬件 2FA短期头寸
交互 DeFi连接 DApp、mint、空投独立热钱包,只放小额"全丢也不心疼"的量
测试 Burner不明链接、新协议、空投领取一次性地址接近 0

分层的本质是"降低单点价值"。所有账户共用一个助记词,等于没有分层——派生路径不同也救不了你,因为助记词一泄露,全部派生地址同时沦陷。

22.2 30 项自查

#检查项不合格的后果
1助记词从未以任何形式进入联网设备(照片、备忘录、云盘、聊天记录)A 类全灭
2助记词有物理备份,且不在单一点(防火/防水/分片)丢失或损毁
3大额地址使用硬件钱包,且固件来自官方渠道盲签 + 供应链
4硬件钱包屏幕能完整显示收款地址,且你逐段核对地址投毒
5交易所开启硬件密钥或 TOTP,不用短信SIM Swap
6交易所邮箱独立,且该邮箱本身开启 2FA账号接管
7每季度用 revoke.cash 清理一次授权B 类慢性失血
8从不点"Max"授权,按需给额度无限授权
9不签任何看不懂的 eth_sign / 盲签请求任意交易被构造
10拒绝一切来源不明的 7702 委托 / "钱包升级"地址被永久劫持
11收款地址从地址簿选,不从交易历史复制地址投毒
12访问 DApp 用书签,不用搜索广告钓鱼站
13钱包扩展只从官方商店安装,且核对开发者假扩展
14浏览器不装来源不明的扩展读取页面与剪贴板
15不用破解软件、不装"空投工具"infostealer
16客服/官方从不私聊你;私聊的一律是骗子远控 / 助记词
17不安装 AnyDesk / TeamViewer 给"客服"设备被完全控制
18签名设备不装聊天软件、不处理邮件F 类社工
19大额转账前用第二通道确认收款方Deepfake / 假合作方
20多签至少 3/5,且签名者分布在不同物理位置单点沦陷
21多签的前端与硬件钱包来自不同厂商同源供应链
22多签升级有 24h+ 时间锁与独立监控Bybit 式攻击
23不在社交媒体公开持仓与职位定向社工
24不参与"保证收益"的任何项目H 类
25新代币先查合约是否可增发/可改税/可暂停貔貅盘
26小额测试后再转大额地址/链选错
27记录常用地址与合约,异常时能对照无法及时发现
28开启地址监控(如 Etherscan 邮件提醒)反应延迟
29知道被盗后该联系谁(见第 25 章)错过黄金时间
30定期演练:假设今天被盗,第一步做什么慌乱中二次损失

23. 项目方防御对照表

把第三部分的每类手法,映射到"预防 / 检测 / 响应"三列。这张表可以直接当作安全建设的路线图。

手法预防检测响应
私钥泄露HSM/MPC、分片、离线签名、最小权限异常签名时间/额度、非白名单地址轮换密钥、暂停提币、广播救援交易
approve 钓鱼前端提示风险、限额授权、授权到期监控大额 Approval 事件引导用户 revoke、下架恶意 spender
供应链(前端)SRI、发布签名、S3 写权限隔离、双人复核构建产物 hash 比对、CDN 完整性监控回滚、全量通告、强制重新签名
npm 投毒锁版本、私有镜像、禁用 postinstall依赖 diff、异常网络请求锁定版本、发布安全公告
合约漏洞审计 + 形式化验证 + 模糊测试 + 暂停开关链上异常调用模拟、TVL 突变告警暂停合约、协商白帽赏金
预言机操纵多源 TWAP、拒绝现货价、借款上限价格偏离阈值告警暂停市场、调整参数
代理升级滥用独立 admin 多签 + 时间锁 + guardian监控 Upgraded 事件取消待执行提案、暂停
跨链桥多验证器 + 轻客户端验证 + 限额异常跨链消息、验证者行为异常暂停桥、冻结流动性
服务器入侵零信任、跳板机、补丁、最小暴露面EDR、异常进程、外联告警隔离主机、轮换全部凭据
内部人员职责分离、双人复核、强制休假不可抵赖审计日志、行为基线冻结权限、取证
社工 / APT高权限人员专用设备、安全意识演练邮件网关、终端 EDR、异常登录隔离、取证、通告合作方

一个可落地的优先级:如果只能做三件事,做这三件——
① 把升级权限与资金权限拆成两个多签;
② 给前端加发布签名与完整性监控;
③ 给热钱包设置单笔与日累计限额,且限额逻辑独立于提币服务。

24. 参数与指令速查

以下命令用于自查授权、核对合约权限、复核交易。示例以以太坊主网为例,其他 EVM 链换 --rpc-url 即可。

24.1 查授权

# 查某代币对某 spender 的授权额度
cast call 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 \
  "allowance(address,address)(uint256)" \
  0x你的地址 0xspender地址 \
  --rpc-url $ETH_RPC

# 查余额
cast call 0xA0b8...eB48 "balanceOf(address)(uint256)" 0x你的地址 --rpc-url $ETH_RPC

# 撤销授权(把额度置 0)
cast send 0xA0b8...eB48 "approve(address,uint256)" 0xspender地址 0 \
  --rpc-url $ETH_RPC --private-key $PK

24.2 查代理与权限

# EIP-1967 实现槽(implementation)
cast storage 0x代理地址 \
  0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc \
  --rpc-url $ETH_RPC

# EIP-1967 管理员槽(admin)
cast storage 0x代理地址 \
  0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103 \
  --rpc-url $ETH_RPC

# 读 owner
cast call 0x合约 "owner()(address)" --rpc-url $ETH_RPC

24.3 查多签

# 阈值与签名者
cast call 0xSafe "getThreshold()(uint256)" --rpc-url $ETH_RPC
cast call 0xSafe "getOwners()(address[])" --rpc-url $ETH_RPC
cast call 0xSafe "nonce()(uint256)" --rpc-url $ETH_RPC

# 解码一笔待签交易的 calldata
cast 4byte 0xa9059cbb
cast decode-calldata "transfer(address,uint256)" 0x...data

24.4 签名前复核

# 看 selector 对应什么函数
cast 4byte-calldata 0x你的calldata

# 本地模拟执行(不广播),看余额变化
cast run 0x交易哈希 --rpc-url $ETH_RPC

# 计算函数选择器
cast sig "transfer(address,uint256)"
工具用途地址
revoke.cash批量查看/撤销授权revoke.cash
Etherscan Token Approval单链授权检查etherscan.io/tokenapprovalchecker
Safe Transaction Service多签交易队列与签名者核对safe.global
Chainabuse上报诈骗地址chainabuse.com
慢雾 Hacked历史事件档案库hacked.slowmist.io

25. 被盗后黄金 10 分钟

被盗后的每一步都在和攻击者抢时间。以下顺序按"能挽回的金额"排序,不要跳步。

25.1 时间线

时间动作目的
0–2 min确认是否还有剩余资产;若有,用另一个干净的钱包转出防止二次损失(攻击者常留后手)
2–5 min撤销该地址对所有合约的授权(revoke.cash,用干净设备)切断后续扣款
5–10 min记录攻击者地址、交易哈希、时间;截图后续报案与申诉的证据
10–30 min在链上给攻击者地址打 0 值交易留言(部分分析工具会索引);同时向 Chainabuse 上报标记地址,便于交易所拦截
30–60 min联系被盗资金流向的交易所客服 / 安全团队;联系慢雾等安全公司争取在入金环节冻结
当天报案(本地网警 / IC3);整理完整资金流向图立案与跨境协作前提
持续监控攻击者地址异动,向每次新流入的交易所提交冻结申请提升追回概率

三个常见错误:
① 在原设备上操作(可能已被控,二次被盗);
② 先发推特求助再处理资产(攻击者也在看,会加速转移);
③ 相信"能帮你追回资金"的第三方(绝大多数是二次诈骗)。

25.2 该联系谁

26. 如何读一份复盘报告

同一事件会有三种材料,可信度与用途完全不同。混着读,就会得出错误结论。

材料类型特征可信度怎么用
官方公告 / PR 稿措辞谨慎,强调"用户资产安全""已弥补缺口"中低(有公关动机)取时间线与金额,不取根因结论
第三方取证报告Sygnia、Verichains、DARKNAVY 等,含样本与调用链高取技术细节与根因
链上数据交易哈希、资金流向、合约调用最高(客观)验证前两者是否一致

26.1 五个必问

  1. 根因落在哪一层?私钥、签名、前端、合约、基础设施——不同层的修复方案完全不同。
  2. 攻击者拿到的是"一次性"还是"持续性"能力?一次签名 vs 私钥 vs 升级权限,影响后续风险窗口。
  3. 有没有"本可以拦住"的控制点?时间锁、限额、多源预言机、SRI——复盘的价值在于找出这些缺口。
  4. 时间线是否自洽?从入侵到转移的时间差,往往暴露了检测能力的缺失。
  5. 金额口径是什么?被盗总额、未追回额、已赔付额经常被混用。

一个典型陷阱:很多复盘把"攻击手法"写成"社工 + 恶意软件"就结束了。但真正需要回答的是——为什么一台开发机能够影响生产环境的签名界面?根因往往在权限设计,而不在"员工点了链接"。

27. 术语索引

术语英文一句话解释章节
外部账户EOA由私钥直接控制的账户,签名即生效1.3
合约账户Contract Account由代码控制,转账需满足逻辑1.3
授权额度allowanceERC-20 中允许他人动用的上限,链上长期有效3.1
离线授权签名Permit (EIP-2612)不上链的授权签名,可被他人代提交3.1
统一授权合约Permit2一次签名覆盖所有 ERC-20 的授权层3.1
盲签Blind Signing签名设备无法展示真实语义3.3
地址投毒Address Poisoning用相似地址污染交易历史3.3
委托代码EIP-7702给 EOA 设置合约代码,可持续劫持入账3.2
代理合约Proxy逻辑与存储分离,可升级4.2 / 11
委托调用delegatecall在调用者存储上下文中执行被调合约代码4.2
闪电贷Flash Loan同笔交易内借还、无需抵押5.1
重入Reentrancy状态更新前被回调再次进入5.2
预言机操纵Oracle Manipulation用交易改变协议读取的价格5.2
分层Layering洗钱中切断资金关联的阶段8.1
混币器Mixer打乱输入输出对应关系8.1
聚类Clustering链上分析中把地址归为同一主体8.2
供应链攻击Supply Chain Attack攻击目标信任的上游组件16
信息窃取木马Infostealer专门窃取浏览器/钱包凭据的恶意软件14.1
威胁情报CTI对攻击者、基础设施、TTP 的情报汇总19
弱随机数Weak RNG私钥熵不足,可被暴力枚举20.1

数据口径说明:本文金额来自 Chainalysis、CertiK、TRM Labs、DeFiLlama、Immunefi 与慢雾 Hacked 档案库的公开统计,统计窗口与归类方式各不相同(例如"基础设施攻击"是否包含私钥泄露),因此不可跨表相加。所有金额仅用于判断结构比例,不作为精确赔付依据。

本文面向安全研究与防御建设,对利用细节仅描述到机制层。若你是受害者,请直接跳至 第 25 章。